package com.gitee.feizns.quickstart.mybatis.plus.utils;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springframework.util.CollectionUtils;

import java.util.List;

/**
 * 包装器实用程序
 * @author feizns
 * @since 2025/7/19
 */
public class WrapperUtils {

    /**
     * 查询响应对象
     * @param type 类型
     * @param voType 响应对象类型
     * @return {@link QueryWrapper }<{@link T }>
     */
    public static <T> QueryWrapper<T> queryVo(Class<T> type, Class<?> voType) {
        return Wrappers.<T>query().select(Mappers.intersectionPropNames(type, voType));
    }

    /**
     * eq 或 in
     * @param values 值
     * @return {@link QueryWrapper }<{@link T }>
     */
    public static <T> QueryWrapper<T> eqOrIn(QueryWrapper<T> queryWrapper, String column, List<?> values) {
        if ( !CollectionUtils.isEmpty(values) ) {
            if ( values.size() == 1 )
                queryWrapper.eq(column, values.get(0));
            else
                queryWrapper.in(column, values);
        }
        return queryWrapper;
    }

    /**
     * eq 或 in
     * @param values 值
     * @return {@link QueryWrapper }<{@link T }>
     */
    public static <T> QueryWrapper<T> idEqOrIn(QueryWrapper<T> wrapper, Class<T> type, List<?> values) {
        TableInfo info = TableInfoHelper.getTableInfo(type);
        if ( !CollectionUtils.isEmpty(values) ) {
            if ( values.size() == 1 )
                wrapper.eq(info.getKeyColumn(), values.get(0));
            else
                wrapper.in(info.getKeyColumn(), values);
        }
        return wrapper;
    }

    /**
     * eq 或 in
     * @param values 值
     * @return {@link QueryWrapper }<{@link T }>
     */
    public static <T> QueryWrapper<T> idEqOrIn(Class<T> type, List<?> values) {
        return idEqOrIn(Wrappers.query(), type, values);
    }

}
